package com.resourcestore.action;
import java.io.UnsupportedEncodingException;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.util.ValueStack;
import com.resourcestore.utils.CommonUtil;
import com.resourcestore.utils.tag.Pagination;
import com.resourcestore.action.BaseAction;
import com.resourcestore.dao.MajorFileSrcCateDao;
import com.resourcestore.dao.MajorDao;
import com.resourcestore.model.MajorFileSrcCate;
import com.resourcestore.model.Major;

public class MajorFileSrcCateAction extends BaseAction {
	
	private MajorFileSrcCate majorFileSrcCate;
	private List<MajorFileSrcCate> listMajorFileSrcCate;
	private MajorFileSrcCateDao majorFileSrcCateDao = new MajorFileSrcCateDao();
	private Pagination pagination = new Pagination();
	private List<Major> listMajor;
	private MajorDao majorDao = new MajorDao();
	
	/**
	 * 查询返回List
	 * @throws ParseException 
	 * 
	 */
	public String listMajorFileSrcCate(){
		
		majorFileSrcCate = new MajorFileSrcCate();
		majorFileSrcCate.setIsPreCategory(-1);
		
		listMajorFileSrcCate = majorFileSrcCateDao.selectMajorFileSrcCate(majorFileSrcCate);
		
		// 将bigint数字处理为时间格式
		for (int i = 0; i < listMajorFileSrcCate.size(); i++) {
			try {
				listMajorFileSrcCate.get(i).setGmtCreatedString(
						CommonUtil.getSysTimeFormatString(listMajorFileSrcCate
								.get(i).getGmtCreated()));
				listMajorFileSrcCate.get(i).setGmtModifiedString(
						CommonUtil.getSysTimeFormatString(listMajorFileSrcCate
								.get(i).getGmtModified()));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//设置预置分类字符串
			if (listMajorFileSrcCate.get(i).getIsPreCategory() == 0) {
				listMajorFileSrcCate.get(i).setIsPreCategoryString("否");
			} else if (listMajorFileSrcCate.get(i).getIsPreCategory() == 1) {
				listMajorFileSrcCate.get(i).setIsPreCategoryString("是");
			}
			if(listMajorFileSrcCate.get(i).getMajorFileCateParentId()==-1){
				listMajorFileSrcCate.get(i).setMajorFileCateParentName("根分类");
			}
		}
		
		return "default";
	}
	
	
	/**
	 * 根据条件搜索，查询返回List带分页
	 * @throws ParseException 
	 * 
	 */
	public String searchListMajorFileSrcCate(){
		
		//对内容进行urldecoder解码
		try {
			majorFileSrcCate.setMajorFileCateName(new String(majorFileSrcCate.getMajorFileCateName().getBytes("iso-8859-1"),"UTF-8"));
			majorFileSrcCate.setMajorName(new String(majorFileSrcCate.getMajorName().getBytes("iso-8859-1"),"UTF-8"));
			majorFileSrcCate.setAuthor(new String(majorFileSrcCate.getAuthor().getBytes("iso-8859-1"),"UTF-8"));
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		//MajorFileCateParentId为0等同于无值替换为-2
		if(majorFileSrcCate.getMajorFileCateParentId()==0){
			majorFileSrcCate.setMajorFileCateParentId(-2);
		}
		pagination.setTotal(majorFileSrcCateDao.queryMajorFileSrcCateNum(majorFileSrcCate));
		listMajorFileSrcCate = majorFileSrcCateDao.selectMajorFileSrcCatePage(majorFileSrcCate,pagination);
		
		// 将bigint数字处理为时间格式
		for (int i = 0; i < listMajorFileSrcCate.size(); i++) {
			try {
				listMajorFileSrcCate.get(i).setGmtCreatedString(
						CommonUtil.getSysTimeFormatString(listMajorFileSrcCate
								.get(i).getGmtCreated()));
				listMajorFileSrcCate.get(i).setGmtModifiedString(
						CommonUtil.getSysTimeFormatString(listMajorFileSrcCate
								.get(i).getGmtModified()));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 设置预置分类字符串
			if (listMajorFileSrcCate.get(i).getIsPreCategory() == 0) {
				listMajorFileSrcCate.get(i).setIsPreCategoryString("否");
			} else if (listMajorFileSrcCate.get(i).getIsPreCategory() == 1) {
				listMajorFileSrcCate.get(i).setIsPreCategoryString("是");
			}
			if (listMajorFileSrcCate.get(i).getMajorFileCateParentId() == -1) {
				listMajorFileSrcCate.get(i).setMajorFileCateParentName("根分类");
			}
		}
		
		return newpath("/MajorFileSrcCate/searchMajorFileSrcCate.jsp");
	}
	
	/**
	 * 多级分类标题文字缩进	
	 */
	public void formatMajorFileSrcCate(List<MajorFileSrcCate> listMFSC){
		
		for (MajorFileSrcCate eachMFSC : listMFSC) {			
			for(int i=0;i<eachMFSC.getDepth();i++){
				eachMFSC.setMajorFileCateName("&nbsp;&nbsp;"+ eachMFSC.getMajorFileCateName());
			}
		}
	}
	
	/**
	 * 多级分类递归函数
	 * 
	 * @param parentChapter
	 * @return
	 */
	public List<MajorFileSrcCate> recursiveListMajorFileSrcCateTree(MajorFileSrcCate parentMFSC) {

		List<MajorFileSrcCate> treeMFSC= new ArrayList<MajorFileSrcCate>();
		List<MajorFileSrcCate> firstStepListMFSC = new ArrayList<MajorFileSrcCate>();// 一级目录
		firstStepListMFSC = majorFileSrcCateDao.selectMajorFileSrcCateByParentId(parentMFSC);
		if (null != firstStepListMFSC && firstStepListMFSC.size() > 0) {
			for (int i = 0; i < firstStepListMFSC.size(); i++) {
				treeMFSC.add(firstStepListMFSC.get(i));

				// 递归时，将majorFileCateParentId换为已查询出来的majorFileCateId
				int newParentChapterId = firstStepListMFSC.get(i).getMajorFileCateId();
				parentMFSC.setMajorFileCateParentId(newParentChapterId);

				treeMFSC.addAll(this.recursiveListMajorFileSrcCateTree(parentMFSC));
			}
		}
		//formatMajorFileSrcCate(treeMFSC);
		return treeMFSC;
	}
	
	/**
	 * 递归更新子分类depth,isPreCategory,majorId
	 * 
	 * @param parentChapter
	 * @return
	 */
	public void recursiveUpdateSubMajorFileSrcCateDepth(MajorFileSrcCate parentMFSC) {

		List<MajorFileSrcCate> firstStepListMFSC = new ArrayList<MajorFileSrcCate>();// 一级目录
		firstStepListMFSC = majorFileSrcCateDao.selectMajorFileSrcCateByParentId(parentMFSC);
		if (null != firstStepListMFSC && firstStepListMFSC.size() > 0) {
			for (int i = 0; i < firstStepListMFSC.size(); i++) {
				//treeMFSC.add(firstStepListMFSC.get(i));
				firstStepListMFSC.get(i).setDepth(parentMFSC.getDepth()+1);
				firstStepListMFSC.get(i).setIsPreCategory(parentMFSC.getIsPreCategory());
				firstStepListMFSC.get(i).setMajorId(parentMFSC.getMajorId());

				try {
					firstStepListMFSC.get(i).setGmtModified(CommonUtil.getSysTimeFormatNum());
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				majorFileSrcCateDao.updateMajorFileSrcCate(firstStepListMFSC.get(i));
				
				// 递归时，将majorFileCateParentId换为已查询出来的majorFileCateId
				int newParentChapterId = firstStepListMFSC.get(i).getMajorFileCateId();
				parentMFSC.setMajorFileCateParentId(newParentChapterId);

				this.recursiveUpdateSubMajorFileSrcCateDepth(parentMFSC);
			}
		}

	}
	
	
	/**
	 * 预插入数据
	  */		
	public String preInsertMajorFileSrcCate(){
			
		listMajor = majorDao.selectMajor();
		
		return newpath("/MajorFileSrcCate/insertMajorFileSrcCate.jsp");		
	}
	
	/**
	 * 插入一条数据
	  */		
	public String insertMajorFileSrcCate(){
		
		try {
			majorFileSrcCate.setGmtCreated(CommonUtil.getSysTimeFormatNum());
			majorFileSrcCate.setGmtModified(CommonUtil.getSysTimeFormatNum());
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		majorFileSrcCateDao.insertMajorFileSrcCate(majorFileSrcCate);
		return redirect(this.getUrl());		
	}
	
	/**
	 * 更新之前加载原信息
	 * 
	 */
	public String preUpdateMajorFileSrcCate(){
		
		majorFileSrcCate = majorFileSrcCateDao.selectMajorFileSrcCateById(majorFileSrcCate);
		
		return newpath("/MajorFileSrcCate/updateMajorFileSrcCate.jsp");
	}
	/**
	 * 更新信息
	 * 
	 */
	public String updateMajorFileSrcCate(){
		
		try {
			//majorFileSrcCate.setGmtCreated(CommonUtil.getSysTimeFormatNum());
			majorFileSrcCate.setGmtModified(CommonUtil.getSysTimeFormatNum());
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		majorFileSrcCateDao.updateMajorFileSrcCate(majorFileSrcCate);
		majorFileSrcCate.setMajorFileCateParentId(majorFileSrcCate.getMajorFileCateId());
		this.recursiveUpdateSubMajorFileSrcCateDepth(majorFileSrcCate);
		
		return redirect(this.getUrl());
	}

	/**
	 * 删除信息
	 */
	public String deleteMajorFileSrcCate(){
	
		majorFileSrcCateDao.deleteMajorFileSrcCate(majorFileSrcCate);
		
		majorFileSrcCate.setMajorFileCateParentId(majorFileSrcCate.getMajorFileCateId());
		List<MajorFileSrcCate> listMfsc = new ArrayList<MajorFileSrcCate>();
		listMfsc = this.recursiveListMajorFileSrcCateTree(majorFileSrcCate);
		for(int i=0;i<listMfsc.size();i++){
			majorFileSrcCateDao.deleteMajorFileSrcCate(listMfsc.get(i));
		}
		return redirect(this.getUrl());
	}
	
	/**
	 * 批量删除信息
	 */
	public String deleteMoreMajorFileSrcCate(){
		
		majorFileSrcCateDao.deleteMoreMajorFileSrcCate(majorFileSrcCate);
		return redirect(this.getUrl());
	}

	
	public MajorFileSrcCate getMajorFileSrcCate() {
		return majorFileSrcCate;
	}

	public void setMajorFileSrcCate(MajorFileSrcCate majorFileSrcCate) {
		this.majorFileSrcCate = majorFileSrcCate;
	}

	public List<MajorFileSrcCate> getListMajorFileSrcCate() {
		return listMajorFileSrcCate;
	}

	public void setListMajorFileSrcCate(List<MajorFileSrcCate> listMajorFileSrcCate) {
		this.listMajorFileSrcCate = listMajorFileSrcCate;
	}


	public Pagination getPagination() {
		return pagination;
	}


	public void setPagination(Pagination pagination) {
		this.pagination = pagination;
	}


	public List<Major> getListMajor() {
		return listMajor;
	}


	public void setListMajor(List<Major> listMajor) {
		this.listMajor = listMajor;
	}
	

}
